package com.mmc.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.mmc.entity.Role;

import java.util.List;

/**
 * 角色服务接口
 *
 * @author kunfe
 * @since 2024-01-01
 */
public interface RoleService extends IService<Role> {

    /**
     * 分页查询角色
     */
    Page<Role> getRolePage(Page<Role> page, String roleName, String roleCode, Integer status);

    /**
     * 根据角色编码查询角色
     */
    Role getRoleByCode(String roleCode);

    /**
     * 检查角色编码是否存在
     */
    boolean existsRoleCode(String roleCode, Long excludeId);

    /**
     * 创建角色
     */
    boolean createRole(Role role);

    /**
     * 更新角色
     */
    boolean updateRole(Role role);

    /**
     * 删除角色
     */
    boolean deleteRole(Long roleId);

    /**
     * 批量删除角色
     */
    boolean batchDeleteRole(List<Long> roleIds);

    /**
     * 启用/禁用角色
     */
    boolean changeStatus(Long roleId, Integer status);

    /**
     * 获取用户角色列表
     */
    List<Role> getUserRoles(Long userId);

    /**
     * 分配角色菜单权限
     */
    boolean assignMenus(Long roleId, List<Long> menuIds);

    /**
     * 获取角色菜单权限
     */
    List<Long> getRoleMenuIds(Long roleId);

    /**
     * 获取所有启用的角色
     */
    List<Role> getEnabledRoles();

    /**
     * 根据用户ID获取权限标识列表
     */
    List<String> getPermissionsByUserId(Long userId);

    /**
     * 检查用户是否拥有指定权限
     */
    boolean hasPermission(Long userId, String permission);

    /**
     * 检查用户是否拥有指定角色
     */
    boolean hasRole(Long userId, String roleCode);
} 